package com.office.workflow.mapper;

import com.office.workflow.domain.Workflow;
import com.office.workflow.domain.WorkflowNode;
import com.office.workflow.domain.WorkflowLink;
import com.office.workflow.domain.WorkflowInstance;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 工作流Mapper接口
 * 
 * @author 数字牧马人
 */
public interface WorkflowMapper 
{
    /**
     * 查询工作流列表
     * 
     * @param workflow 工作流
     * @return 工作流集合
     */
    public List<Workflow> selectWorkflowList(Workflow workflow);

    /**
     * 查询工作流
     * 
     * @param id 工作流主键
     * @return 工作流
     */
    public Workflow selectWorkflowById(Long id);

    /**
     * 新增工作流
     * 
     * @param workflow 工作流
     * @return 结果
     */
    public int insertWorkflow(Workflow workflow);

    /**
     * 修改工作流
     * 
     * @param workflow 工作流
     * @return 结果
     */
    public int updateWorkflow(Workflow workflow);

    /**
     * 删除工作流
     * 
     * @param id 工作流主键
     * @return 结果
     */
    public int deleteWorkflowById(Long id);

    /**
     * 批量删除工作流
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteWorkflowByIds(Long[] ids);

    /**
     * 查询工作流节点列表
     * 
     * @param workflowId 工作流ID
     * @return 节点集合
     */
    public List<WorkflowNode> selectWorkflowNodesByWorkflowId(Long workflowId);

    /**
     * 新增工作流节点
     * 
     * @param node 节点
     * @return 结果
     */
    public int insertWorkflowNode(WorkflowNode node);

    /**
     * 批量新增工作流节点
     * 
     * @param nodes 节点列表
     * @return 结果
     */
    public int batchInsertWorkflowNodes(List<WorkflowNode> nodes);

    /**
     * 修改工作流节点
     * 
     * @param node 节点
     * @return 结果
     */
    public int updateWorkflowNode(WorkflowNode node);

    /**
     * 删除工作流节点
     * 
     * @param workflowId 工作流ID
     * @return 结果
     */
    public int deleteWorkflowNodesByWorkflowId(Long workflowId);

    /**
     * 查询工作流连线列表
     * 
     * @param workflowId 工作流ID
     * @return 连线集合
     */
    public List<WorkflowLink> selectWorkflowLinksByWorkflowId(Long workflowId);

    /**
     * 新增工作流连线
     * 
     * @param link 连线
     * @return 结果
     */
    public int insertWorkflowLink(WorkflowLink link);

    /**
     * 批量新增工作流连线
     * 
     * @param links 连线列表
     * @return 结果
     */
    public int batchInsertWorkflowLinks(List<WorkflowLink> links);

    /**
     * 修改工作流连线
     * 
     * @param link 连线
     * @return 结果
     */
    public int updateWorkflowLink(WorkflowLink link);

    /**
     * 删除工作流连线
     * 
     * @param workflowId 工作流ID
     * @return 结果
     */
    public int deleteWorkflowLinksByWorkflowId(Long workflowId);

    /**
     * 查询工作流执行实例列表
     * 
     * @param instance 实例
     * @return 实例集合
     */
    public List<WorkflowInstance> selectWorkflowInstanceList(WorkflowInstance instance);

    /**
     * 查询工作流执行实例
     * 
     * @param id 实例主键
     * @return 实例
     */
    public WorkflowInstance selectWorkflowInstanceById(Long id);

    /**
     * 新增工作流执行实例
     * 
     * @param instance 实例
     * @return 结果
     */
    public int insertWorkflowInstance(WorkflowInstance instance);

    /**
     * 修改工作流执行实例
     * 
     * @param instance 实例
     * @return 结果
     */
    public int updateWorkflowInstance(WorkflowInstance instance);

    /**
     * 删除工作流执行实例
     * 
     * @param id 实例主键
     * @return 结果
     */
    public int deleteWorkflowInstanceById(Long id);

    /**
     * 批量删除工作流执行实例
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteWorkflowInstanceByIds(Long[] ids);

    /**
     * 统计工作流执行次数
     * 
     * @param workflowId 工作流ID
     * @return 执行次数
     */
    public int countWorkflowExecutions(Long workflowId);
} 